package com.intelligent.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.intelligent.pojo.ProductionPlans;
import com.intelligent.service.ProductionPlansService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import java.util.Date;

@RestController
@RequestMapping("/productionPlans")
public class ProductionPlansController {

    @Autowired
    private ProductionPlansService productionPlansService;

    /**
     * 分页查询生产计划（包含用户信息）
     * @param current 当前页
     * @param size 每页大小
     * @param planNo 计划编号
     * @param planStatus 计划状态
     * @param sourceType 来源类型
     * @param urgentStatus 加急状态
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param username 负责人用户名
     * @return 分页结果
     */
    @GetMapping("/page")
    public IPage<ProductionPlans> getProductionPlansPage(
            @RequestParam(defaultValue = "1") Long current,
            @RequestParam(defaultValue = "10") Long size,
            @RequestParam(required = false) String planNo,
            @RequestParam(required = false) Integer planStatus,
            @RequestParam(required = false) Integer sourceType,
            @RequestParam(required = false) Integer urgentStatus,
            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date startTime,
            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime,
            @RequestParam(required = false) String username) {
        
        Page<ProductionPlans> page = new Page<>(current, size);
        return productionPlansService.selectProductionPlansWithUser(page, planNo, planStatus, 
                                                                   sourceType, urgentStatus, 
                                                                   startTime, endTime, username);
    }

    /**
     * 添加生产计划
     * @param productionPlans 生产计划对象
     * @return 操作结果
     */
    @PostMapping("/add")
    public String addProductionPlan(@RequestBody ProductionPlans productionPlans) {
        boolean success = productionPlansService.addProductionPlan(productionPlans);
        return success ? "添加成功" : "添加失败";
    }

    /**
     * 根据计划编号更新生产计划
     * @param productionPlans 生产计划对象
     * @return 操作结果
     */
    @PutMapping("/update")
    public String updateProductionPlan(@RequestBody ProductionPlans productionPlans) {
        boolean success = productionPlansService.updateProductionPlanByPlanNo(productionPlans);
        return success ? "更新成功" : "更新失败";
    }

    /**
     * 根据计划编号删除生产计划
     * @param planNo 计划编号
     * @return 操作结果
     */
    @DeleteMapping("/delete/{planNo}")
    public String deleteProductionPlan(@PathVariable String planNo) {
        boolean success = productionPlansService.deleteProductionPlanByPlanNo(planNo);
        return success ? "删除成功" : "删除失败";
    }

    /**
     * 根据ID查询生产计划（包含用户信息）
     * @param id 记录ID
     * @return 生产计划对象
     */
    @GetMapping("/{id}")
    public ProductionPlans getProductionPlanById(@PathVariable Long id) {
        return productionPlansService.getProductionPlanByIdWithUser(id);
    }
}
